﻿// pch.h: 这是预编译标头文件。
// 下方列出的文件仅编译一次，提高了将来生成的生成性能。
// 这还将影响 IntelliSense 性能，包括代码完成和许多代码浏览功能。
// 但是，如果此处列出的文件中的任何一个在生成之间有更新，它们全部都将被重新编译。
// 请勿在此处添加要频繁更新的文件，这将使得性能优势无效。

#ifndef PCH_H
#define PCH_H

// 添加要在此处预编译的标头
#include "framework.h"
#include <gdiplus.h> // GDI+支持
#include <iostream>
#include "CColorBox.h"
#include "CComboxAdv.h"
extern ULONG_PTR gdiplusToken;// GDI token
// zcy
// 包含纯虚函数的类不能直接实例化，继承类必须实现
struct SLayer {
	enum STAT {
		ST_DRAW = 0,
		ST_NORMAL,
		ST_SELECT
	};
	STAT m_stat{ST_DRAW};
	COLORREF m_clPen, m_clBrush;
	int m_nWidth{ 3 };
	static CPoint m_last;
	virtual void OnLButtonDown(UINT nFlags, CPoint point) = 0;
	virtual void OnLButtonUp(UINT nFlags, CPoint point) = 0;
	virtual void OnMouseMove(UINT nFlags, CPoint point, CDC* pDC = nullptr) = 0;
	virtual void OnDraw(CDC* pDC) = 0;
	virtual BOOL Check(CPoint point) const = 0;
	virtual BOOL Select(CPoint point) = 0;

	Gdiplus::Pen pen{ Gdiplus::Color(200, 255, 0, 255), 2 };

	// 自定义删除器（确保正确释放）
	struct GraphicsDeleter {
		void operator()(Gdiplus::Graphics* p) const { 
			delete p; 
		}
	};

	// 返回唯一所有权智能指针
	std::unique_ptr<Gdiplus::Graphics, GraphicsDeleter> CreateGraphics(CDC* pDC) {
		HDC hdc = pDC->GetSafeHdc();
		auto p = new Gdiplus::Graphics(hdc);
		p->SetSmoothingMode(Gdiplus::SmoothingModeAntiAlias); // 全局抗锯齿
		p->SetTextRenderingHint(Gdiplus::TextRenderingHintAntiAlias); // 文本抗锯齿
		return std::unique_ptr<Gdiplus::Graphics, GraphicsDeleter>(p);
	}
};

#endif //PCH_H
